package com.application.model.universidades.quevasaestudiar.manager;

import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.application.model.universidades.quevasaestudiar.entries.Carrera;

public class ManagerCarrera extends RetrivierWebQueVas {

	
	public ManagerCarrera(ManagerQueVasEntity informacion) {
		super(informacion);
	}
	
	public List<Carrera> getCarreras(String data) {
		List<Carrera> 	carreras = new LinkedList<Carrera>();
		Carrera			carrera = null;
		String  		regex = "";
		String			urlCarrera = "";
		Pattern    		pattern = null;
        Matcher     	matcher = null;
        
        regex = "<a href=\"(.*?)\">";
        pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL|Pattern.UNICODE_CASE|Pattern.UNIX_LINES);
        matcher = pattern.matcher(data);
        
        while (matcher.find()) {
        	urlCarrera = "http://www.quevasaestudiar.com"+matcher.group(1);
        	
        	carrera = getCarreraContent(urlCarrera, "<!-- inicio columna_izq -->", "<!-- buscador chico -->", "utf-8");
        	if(carrera!=null){
        		if(!carreras.contains(carrera)){
        			logger.info("carrera agregada "+carrera.getNombre());
        			carreras.add(carrera);
        		}
        	}
        }
		return carreras;
	}

	private Carrera getCarreraContent(String url, String beginPatter, String endPatter, String charset) {
		Carrera 	carrera = null;
		String 		data = "";
		Pattern    		pattern = null;
        Matcher     	matcher = null;
        String  		regex = "";
        String  		dataNombre = "";
        String  		dataTipo = "";
        String  		dataUbicacion = "";
        String  		dataCaracteristicas = "";
        String  		dataFotos = "";
        String  		dataPlanDeEstudio = "";
        String  		dataCampoLaboral = "";
        String  		dataRequisitos = "";
        String  		dataInfoAdicional = "";
        data = getWebPageContent(url, beginPatter, endPatter, charset);
        if(!data.isEmpty()){
	        regex = "texto_detalle01\">(.*?)</div>.*?texto_detalle02\">(.*?)</div>.*?texto_detalle03\">(.*?)</div>.*?detalle03\">(.*?)</div>.*?fotos_detalle\">(.*?)<br style=\".*?detalle10_3\">(.*?)<br style=\".*?detalle10_00\">(.*?)<br style=\".*?detalle10_05\">(.*?)<br style=\".*?detalle10_08\">(.*?)<br style=\"";
	        pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL|Pattern.UNICODE_CASE|Pattern.UNIX_LINES);
	        matcher = pattern.matcher(data);
	        
	        while (matcher.find()) {
	        	carrera = new Carrera();
	        	
	        	dataNombre = matcher.group(1);
	        	dataTipo = matcher.group(2);
	            dataUbicacion = matcher.group(3);
	            dataCaracteristicas = matcher.group(4);
	            dataFotos = matcher.group(5);
	            dataPlanDeEstudio = matcher.group(6);
	            dataCampoLaboral = matcher.group(7);
	            dataRequisitos = matcher.group(8);
	            dataInfoAdicional = matcher.group(9);
	            
	            carrera.setUrlCollector(url);
	            carrera.setNombre(getNombre(dataNombre));
	            carrera.setTitulo(getTitulo(dataNombre));
	            carrera.setTipoDeCarrera(getTipoDeCarrera(dataTipo));
	            carrera.setModalidad(getModalidad(dataTipo));
	            carrera.setDuracion(getDuracion(dataTipo));
	            carrera.setCaracteristicas(getCaracteristicas(dataCaracteristicas));
	            carrera.setPlanDeEstudio(getPlanDeEstudio(dataPlanDeEstudio));
	            carrera.setCampoLaboral(getCampoLaboral(dataCampoLaboral));
	            carrera.setRequisitos(getRequisitos(dataRequisitos));
	            carrera.setInformacionAdicional(getInformacionAdicional(dataInfoAdicional));
	        }
        }
		return carrera;
	}
	private String getInformacionAdicional(String data) {
		String value = "";
		value = getValue(data, "detalle10_10\">\\s*(.*) </div>", 1);
		return value;
	}
	private String getRequisitos(String data) {
		String value = "";
		value = getValue(data, "detalle10_07\">\\s*(.*?) </div>", 1);
		return value;
	}
	private String getCampoLaboral(String data) {
		String value = "";
		value = getValue(data, "detalle10_02\">\\s*(.*?) </div>", 1);
		return value;
	}
	private String getPlanDeEstudio(String data) {
		String value = "";
		value = getValue(data, "detalle10_04\">\\s*(.*?) </div>", 1);
		return value;
	}
	private String getCaracteristicas(String data) {
		String value = "";
		value = getValue(data, "<h3>Características</h3> <br />\\s*(.*)", 1);
		return value;
	}
	private String getDuracion(String data) {
		String value = "";
		value = getValue(data, "Duración: </strong>\\s*(.*?)</", 1);
		return value;
	}
	private String getModalidad(String data) {
		String value = "";
		value = getValue(data, "Modalidad: </strong>\\s*(.*?)</", 1);
		return value;
	}
	private String getTipoDeCarrera(String data) {
		String value = "";
		value = getValue(data, "Tipo de Carrera: </strong>\\s*(.*?)</", 1);		
		return value;
	}

	private String getNombre(String data) {
		String value = "";
		value = getValue(data, "h1>\\s*(.*?)</h1>", 1);		
		return value;
	}

	private String getTitulo(String data) {
		String value = "";
		value = getValue(data, "><h2>\\s*(.*?)</h2>", 1);		
		return value;
	}

	@Override
	protected String getValue(String data, String regex, Integer grupoId) {
		String value = "";
		value = super.getValue(data, regex, grupoId);
		if(value.matches(".*Por el momento, no tenemos este dato.*")){
			value="";
		}
		return value;
	}
}
